package com.example.lotterysystem.common.exception;

import com.example.lotterysystem.common.errorcode.ErrorCode;
import lombok.Data;
import lombok.EqualsAndHashCode;

// 这里的 @Data 注解只会生成自身的 equals hashcode 不会处理 父类的 属性，因为是继承的关系，所以需要处理一下对于父类的属性的
// 所以需要使用 @EqualsAndHashCode 注解进行处理
@Data
// @EqualsAndHashCode 将其中的 参数赋值为true，即可将父类的一些属性 放到 equals hashcode 中进行处理
@EqualsAndHashCode(callSuper = true)
public class ServiceException extends RuntimeException {
    /**
     * 异常码
     * @see com.example.lotterysystem.common.errorcode.ServiceErrorCodeConstants
     */
    private Integer code;

    /**
     * 异常信息
     */
    private String message;

    // 这里的 无参构造方法 是为了 处理反序列化问题的
    public ServiceException() {

    }

    public ServiceException(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    public ServiceException(ErrorCode errorCode) {
        this.code = errorCode.getCode();
        this.message = errorCode.getMsg();
    }
}
